/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 23735
 * Date: 2023-10-10
 * Time: 22:16
 */

public class Solution {
    public int add(int a, int b) {
        int ans = 0;
        int carry = 0;
        for (int i = 0; i < 32; i++) {
            int bit1 = (a>>i) & 1;
            int bit2 = (b>>i) & 1;
            int sum = bit1 + bit2 + carry;
            int bit = 0;
            if (sum == 0) {
                bit = 0;
                carry = 0;
            } else if (sum == 1) {
                bit = 1;
                carry = 0;
            } else if (sum == 2) {
                bit = 0;
                carry = 1;
            } else {
                bit = 1;
                carry = 1;
            }
            ans |= (bit<<i);
        }
        return ans;
    }


    // 位运算
    public int add2(int a, int b) {
//         a ^ b 是不带进位的加法, 那需要进位怎么办 ? 把要进的位算出来
//         a & b 得到的就是哪几个位置会产生进位, (a & b) << 1 就是要进的位应该加在哪里
//         这样把 不带进位的加法与要进的位加起来就行了
//         但是加的过程中还有可能产生进位
//         那么重复上面过程就行了, 直到不再产生进位
        while (b != 0) {
            int carry = (a & b) << 1;
            a = a ^ b;
            b = carry;
        }
        return a;
    }
}
